//
//  DataManager.h
//  Gorilla
//
//  Created by 张 霄鹤 on 10-2-4.
//  Copyright 2010 xhzhang. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "Account.h"

/**
 * 数据管理器，管理软件的所有数据，包括导航数据等
 *
 *
 */
@interface DataManager : NSObject {
	NSFetchedResultsController *fetchedResultsController;
	NSManagedObjectContext *managedObjectContext;
	NSMutableArray *accounts;
	BOOL update;
	NSData *token;
	NSString *proxyAddress;
	NSArray *shortenURLServices;
}

@property(nonatomic, retain) NSFetchedResultsController *fetchedResultsController;
@property(nonatomic, retain) NSManagedObjectContext *managedObjectContext;
@property(nonatomic, retain) NSData *token;
@property(nonatomic) BOOL update;
@property(nonatomic, retain) NSString *proxyAddress;

+ (DataManager *)sharedManager;

#pragma mark -
#pragma mark AppDocumentPath
/**
 Returns the path to the application's documents directory.
 */
+ (NSString *)applicationDocumentsDirectory ;

#pragma mark -

/**
 * 保存对象到文件
 * @param items 对象，将对象序列化到path文件中
 * @param path  文件路径
 */
+ (BOOL)saveObjectToFile:(id)items withName:(NSString *)path;
/**
 * 加载对象
 * @param path 路径，从path中加载对象
 */
+ (id)loadObjectFromFile:(NSString *)path;

/**
 * 保存数据到指定文件
 * 
 * @param data NSData 数据
 * @param path NSString 文件名
 * @return BOOL 是否保存成功
 */
+ (BOOL)saveBinaryToFile:(NSData *)data withName:(NSString *)path;

/**
 * 从指定的文件中读取数据
 * @param path 文件，相对于Document目录
 * @return NSData 数据 
 */
+ (NSData *)loadBinaryFromFile:(NSString *)path;

/**
 * 触发网络请求，访问指定地址，获取数据，并且存储到相应的文件中
 * 启动异步网络请求
 * @param address NSString 请求地址
 * @param dfile   NSString 存储路径，相对路径，相对于Documents
 */
- (void)updateData:(NSString *)address toDataFile:(NSString *)dfile;

/**
 * 创建查询器
 * @param entityName 相应的查询内容对象
 * @param sortKey    排列的内容
 * @return NSFetchedResultsController 查询结果控制器
 */
- (NSFetchedResultsController *)fetchedResultsControllerForName:(NSString *)entityName withSortKey:(NSString *)sortKey;

// 账号管理部分

- (void)addAccount:(Account *)acc;

- (Account *)getAccount:(NSInteger)index;

- (BOOL)deleteAccount:(NSInteger)index;

- (NSInteger)numberOfAccounts;

- (BOOL)loadAccounts;

- (void)saveAccounts;

// 结束

// 短地址配置部分

- (NSArray *)getShortenURLServices;

- (NSString *)getShortenURLSettingName;

- (NSInteger)getShortenURLSettingIndex;

- (void)setShortenURLSettingIndex:(NSInteger)index;

// 结束


@end
